package com.bot.nft.module.op.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bot.common.pojo.CommonResult;
import com.bot.nft.module.dc.domain.vo.DcNftCertVo;
import com.bot.nft.module.op.domain.bo.OpSynActInfoBo;
import com.bot.nft.module.op.domain.bo.OpSynActRulesBo;
import com.bot.nft.module.op.domain.bo.OpSynSeachBo;
import com.bot.nft.module.op.domain.bo.OpSynThesisBo;
import com.bot.nft.module.op.domain.vo.OpSynActInfoVo;
import com.bot.nft.module.op.service.ISynService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/syn")
@CrossOrigin
public class OpSynController {

    @Resource
    public ISynService iSynService;

    /**
     * 查询合成活动功能
     *
     * @param pageNo   页码
     * @param pageSize 每页条数
     * @param seachBo  搜索信息
     * @return
     */
    @PostMapping("/{pageNo}/{pageSize}/listSyn.do")
    public CommonResult<Page<OpSynActInfoVo>> querySyn(@PathVariable("pageNo") Integer pageNo, @PathVariable("pageSize") Integer pageSize, @RequestBody OpSynSeachBo seachBo) {
        //调用查询合成活动接口
        Page<OpSynActInfoVo> synActInfoVo = iSynService.querySyn(seachBo.getKeyword(), seachBo.getStatus(), pageNo, pageSize);
        //把查出来的数据放入统一格式中
        CommonResult<Page<OpSynActInfoVo>> data = CommonResult.data(synActInfoVo);
        //返回数据
        return data;
    }

    /**
     * 新增合成活动
     *
     * @param synActInfoBo 合成活动信息
     * @return
     */
    @PostMapping("/addSyn.do")
    public CommonResult<Boolean> addSyn(@RequestBody @Valid OpSynActInfoBo synActInfoBo) {
        synActInfoBo.setStatus(0);
        synActInfoBo.setCreateTime(new Date());
        synActInfoBo.setDeleteFlag(0);
        synActInfoBo.setCreateUser("好好好");
        //调用添加合成活动接口
        Boolean flag = iSynService.addSyn(synActInfoBo);
        if (!flag) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 修改合成活动
     *
     * @param synActInfoBo 合成活动信息
     * @return
     */
    @PostMapping("/update.do")
    public CommonResult<Boolean> updateSyn(@RequestBody @Valid OpSynActInfoBo synActInfoBo) {
        synActInfoBo.setUpdateUser("六六六");
        synActInfoBo.setUpdateTime(new Date());
        //调用修改合成活动接口
        Boolean flag = iSynService.updateSyn(synActInfoBo);
        if (!flag) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 删除合成活动
     *
     * @param synActId 合成活动标识
     * @return
     */
    @GetMapping("/{synActId}/delSyn.do")
    public CommonResult<Boolean> delSyn(@PathVariable String synActId) {
        //调用删除合成活动接口
        Boolean flag = iSynService.delSyn(synActId);
        if (!flag) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 启用合成活动
     *
     * @param synActId 合成活动标识
     * @return
     */
    @GetMapping("/{synActId}/enableSyn.do")
    public CommonResult<Boolean> enableSyn(@PathVariable String synActId) {
        //调用启用合成活动接口
        Boolean flag = iSynService.enableSyn(synActId);
        if (!flag) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 禁用合成活动
     *
     * @param synActId 合成活动标识
     * @return
     */
    @GetMapping("/{synActId}/disableSyn.do")
    public CommonResult<Boolean> disableSyn(@PathVariable String synActId) {
        //调用禁用合成活动接口
        Boolean flag = iSynService.disableSyn(synActId);
        if (!flag) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 查看合成活动信息
     *
     * @param synActId 合成活动标识
     * @return
     */
    @GetMapping("/{synActId}/getSyn.do")
    public CommonResult<OpSynActInfoVo> getSyn(@PathVariable String synActId) {
        //调用查看合成活动接口
        OpSynActInfoVo synActInfoVo = iSynService.getSyn(synActId);
        //把查出来的数据放入统一格式中
        CommonResult<OpSynActInfoVo> data = CommonResult.data(synActInfoVo);
        //返回数据
        return data;
    }

    /**
     * 查看合成的藏品的库存
     *
     * @param nftId 合成活动标识
     * @return
     */
    @GetMapping("/{nftId}/getInven.do")
    public CommonResult<Integer> getInven(@PathVariable String nftId) {
        //调用查看合成活动接口
        Integer inven = iSynService.sumInven(nftId,null);
        //把查出来的数据放入统一格式中
        CommonResult<Integer> data = CommonResult.data(inven);
        //返回数据
        return data;
    }

    /**
     * 修改库存功能
     * @param SynActRulesBo 修改库存Bo
     * @return
     */
    @PostMapping("/{synActId}/updateInven.do")
    public CommonResult<Boolean> updateInven(@PathVariable("synActId")String synActId,@RequestBody @Valid List<OpSynActRulesBo> SynActRulesBo) {
        //调用修改库存功能接口
        Boolean flag = iSynService.updateInven(synActId,SynActRulesBo);
        if (!flag) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

//    /**
//     * 合成藏品功能
//     *
//     * @param thesisBo 合成藏品请求体
//     * @return
//     */
//    @PostMapping("/synThesis.do")
//    public CommonResult<DcNftCertVo> synThesis(@RequestBody OpSynThesisBo thesisBo) {
//        //调用合成藏品功能接口
//        DcNftCertVo dcNftCertVo = iSynService.synThesis(thesisBo.getNftIdList(), thesisBo.getMbId(), thesisBo.getSynId());
//        if (dcNftCertVo==null) {
//            return CommonResult.error();
//        }
//        //把查出来的数据放入统一格式中
//        CommonResult<DcNftCertVo> data = CommonResult.data(dcNftCertVo);
//
//        return data;
//    }
}
